package app.models;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import app.models.enums.TipoConsulta;

/**
 * @author Douglas Fernandes
 * @since 22/11/2013
 */

@Entity
@Table(name = "CONSULTA")
public class Consulta implements Pojo {
	
	private static final long serialVersionUID = 2533079156016816580L;
	
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID")
	private Long id;

	@NotNull(message = "O tipo deve ser preenchido")
	@Column(name = "TIPO", columnDefinition = "varchar(30)")
	@Enumerated(EnumType.STRING)
	private TipoConsulta tipo;
	
	@NotNull(message = "A consulta deve ter um especialista")
	@Column(name = "ID_ESPECIALISTA", columnDefinition = "long")
	private Long idEspecialista;
	
	@NotNull(message = "A consulta deve ter um funcionario")
	@Column(name = "ID_FUNCIONARIO", columnDefinition = "long")
	private Long idFuncionario;
	
	@Column(name = "ID_PACIENTE", columnDefinition = "long")
	private Long idPaciente;
	
	@Column(name = "ID_CONVENIO", columnDefinition = "long")
	private Long idConvenio;
	
	@NotNull(message = "A consulta deve ter um servico")
	@Column(name = "ID_SERVICO", columnDefinition = "long")
	private Long idServico;
	
	@Pattern(regexp = "[0-9]{4}/[0-9]{2}/[0-9]{4}", message = "A data do cadastro esta mal formada")
	@NotNull(message = "A data do cadastro deve ser preenchida")
	@Column(name = "DATA_CADASTRO", columnDefinition = "date")
	private String dataCadastro;
	
	@Pattern(regexp = "[0-9]{4}/[0-9]{2}/[0-9]{4}", message = "A data da consulta esta mal formada")
	@NotNull(message = "A data da consulta deve ser preenchida")
	@Column(name = "DATA", columnDefinition = "date")
	private String data;
	
	@Pattern(regexp = "[0-9]{2}:[0-9]{2}:[0-9]{2}", message = "A hora inicial da consulta esta mal formada")
	@NotNull(message = "A hora inicial deve ser preenchida")
	@Column(name = "HORA_INICIAL", columnDefinition = "time")
	private String horaInicial;

	@Pattern(regexp = "[0-9]{2}:[0-9]{2}:[0-9]{2}", message = "A hora final do cadastro esta mal formada")
	@NotNull(message = "A hora final deve ser preenchida")
	@Column(name = "HORA_FINAL", columnDefinition = "time")
	private String horaFinal;
	
	@NotNull(message = "A consulta deve ter um valor")
	@Column(name = "VALOR", columnDefinition = "double")
	private Double valor;
	
	@NotNull
	@Column(name = "fl_paga", columnDefinition = "boolean")
	private boolean flPaga = false;
	
	@NotNull
	@Column(name = "fl_realizada", columnDefinition = "boolean")
	private boolean flRealizada = false;
	
	
	public void setId(Long id) {
		this.id = id;
	}

	public Long getId() {
		return id;
	}

	public TipoConsulta getTipo() {
		return tipo;
	}

	public void setTipo(TipoConsulta tipo) {
		this.tipo = tipo;
	}

	public Long getIdEspecialista() {
		return idEspecialista;
	}

	public void setIdEspecialista(Long idEspecialista) {
		this.idEspecialista = idEspecialista;
	}

	public void setIdFuncionario(Long idFuncionario) {
		this.idFuncionario = idFuncionario;
	}

	public Long getIdFuncionario() {
		return idFuncionario;
	}

	public void setIdPaciente(Long idPaciente) {
		this.idPaciente = idPaciente;
	}

	public Long getIdPaciente() {
		return idPaciente;
	}

	public void setIdConvenio(Long idConvenio) {
		this.idConvenio = idConvenio;
	}

	public Long getIdConvenio() {
		return idConvenio;
	}

	public void setIdServico(Long idServico) {
		this.idServico = idServico;
	}

	public Long getIdServico() {
		return idServico;
	}

	public String getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(String dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public void setData(String data) {
		this.data = data;
	}

	public String getData() {
		return data;
	}

	public String getHoraInicial() {
		return horaInicial;
	}

	public void setHoraInicial(String horaInicial) {
		this.horaInicial = horaInicial;
	}

	public String getHoraFinal() {
		return horaFinal;
	}

	public void setHoraFinal(String horaFinal) {
		this.horaFinal = horaFinal;
	}

	public void setValor(Double valor) {
		this.valor = valor;
	}

	public Double getValor() {
		return valor;
	}

	public void setFlPaga(boolean flPaga) {
		this.flPaga = flPaga;
	}

	public boolean isFlPaga() {
		return flPaga;
	}

	public void setFlRealizada(boolean flRealizada) {
		this.flRealizada = flRealizada;
	}

	public boolean isFlRealizada() {
		return flRealizada;
	}

}
